package com.shujia.wyh.day14;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/*
    如何通过反射获取成员方法并使用
 */
public class ClassDemo4 {
    public static void main(String[] args) throws Exception {
        //1、获取Class文件对象
        Class<?> studentClass = Class.forName("com.shujia.wyh.day14.Student");

        //2、通过反射获取构造方法
        Constructor<?> c1 = studentClass.getConstructor();

        //3、通过构造方法创建对象
        Object o = c1.newInstance();

        //getMethod()只能获取被public所修饰的成员方法
        Method fun1 = studentClass.getMethod("fun1");
        System.out.println(fun1);
        Method fun2 = studentClass.getDeclaredMethod("fun2");
//        Method fun2 = studentClass.getMethod("fun2");
        System.out.println(fun2);

        //Object invoke(Object obj, Object... args)
        //在具有指定参数的 方法对象上调用此 方法对象表示的底层方法。
//        fun1.invoke(o);

        Method fun4 = studentClass.getDeclaredMethod("fun4", String.class);
        //暴力访问
        fun4.setAccessible(true);
        fun4.invoke(o,"数加科技！！");
    }
}
